package com.example.binjiangapp.common.utils;

import CoreFrame.BufInfo;
import CoreFrame.CommonHead;
import CoreFrame.Pr;
import CoreFrame.PrApi;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class MyPrDemo<timerTask> extends Pr
{
    int m_nMessageNumber = 1;
    PrApi m_prApi_Sub;
    ArrayList<Byte> vectorInput = new ArrayList<Byte>();
    MyPrDemo m_stMyPrDemo = this;
    String m_strContent;

    TimerTask timerTask = new TimerTask()
    {
        @Override
        public void run()
        {
            m_prApi_Sub = m_stMyPrDemo.GetApi("MQ_State");
            //m_prApi_Sub = m_stMyPrDemo.GetApi("S_XX_SvrDemo");
            //判断服务接口类是否为空
            if(m_prApi_Sub != null)
            {
                //Json输入为{\"JsonContent\": \"Test\"}
                String strContent = "{\"JsonContent\": \"TestTest\"}";

                CommonHead stCommonHead = new CommonHead(
                        "\\\\www.Dm1188.cn\\api\\v1.0\\S_XX_SvrDemo",//目的地址
                        "\\\\www.Dm1188.cn\\api\\v1.0\\SvrJava",//源地址
                        "P2P3_HelloWorld",//主题
                        "V1.0",//信息版本号
                        0,//文件类型 0=实装、1=回放、2=模拟
                        "",//令牌
                        GetDate(),//获取1970年1月1日（北京时间）到现在的毫秒数
                        m_nMessageNumber,//唯一消息号，每发一包依次递增
                        new BufInfo(10, 1, 1),//有二进制数据的情况下填写,总包数,当前包号
                        strContent
                );

                //唯一消息号，每发一包依次递增
                m_nMessageNumber ++;
                //Json转换为字符串
                String strTemp = JSON.toJSONString(stCommonHead, SerializerFeature.PrettyFormat);
                //输入消息
                StringBuffer strInput = new StringBuffer(strTemp);
                //返回值
                String strRet = "";
                //字符串输出
                StringBuffer strOutput = new StringBuffer();
                //二进制输出
                ArrayList<Byte> vectorOutput = new ArrayList<Byte>();
                //调用发布接口
                strRet =  m_prApi_Sub.Get(strInput,strOutput,vectorInput,vectorOutput);

            }


        }
    };
    Timer timer = new Timer("Timer");

    public String GetDate()
    {
        SimpleDateFormat myFormait = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        String strDate = myFormait.format(new Date());
        return strDate;
    }

    public int OnPostInit(StringBuffer name1,StringBuffer name2)
    {
        m_prApi_Sub = m_stMyPrDemo.GetApi("MQ_Debug");
        //m_prApi_Sub = m_stMyPrDemo.GetApi("S_XX_SvrDemo");
        //判断服务接口类是否为空
        if(m_prApi_Sub != null)
        {
            //Json输入为{\"JsonContent\": \"Test\"}
            String strContent = "{\"JsonContent\": \"TestTest\"}";

            CommonHead stCommonHead = new CommonHead(
                    "\\\\www.Dm1188.cn\\api\\v1.0\\S_XX_SvrDemo",//目的地址
                    "\\\\www.Dm1188.cn\\api\\v1.0\\SvrJava",//源地址
                    "P2P3_HelloWorld",//主题
                    "V1.0",//信息版本号
                    0,//文件类型 0=实装、1=回放、2=模拟
                    "",//令牌
                    GetDate(),//获取1970年1月1日（北京时间）到现在的毫秒数
                    m_nMessageNumber,//唯一消息号，每发一包依次递增
                    new BufInfo(10, 1, 1),//有二进制数据的情况下填写,总包数,当前包号
                    strContent
            );

            //唯一消息号，每发一包依次递增
            m_nMessageNumber ++;
            //Json转换为字符串
            String strTemp = JSON.toJSONString(stCommonHead, SerializerFeature.PrettyFormat);
            //输入消息
            StringBuffer strInput = new StringBuffer(strTemp);
            //返回值
            String strRet = "";
            //字符串输出
            StringBuffer strOutput = new StringBuffer();
            //二进制输出
            ArrayList<Byte> vectorOutput = new ArrayList<Byte>();
            System.out.println("strInput");
            System.out.println(strInput);
            //调用发布接口
            strRet =  m_prApi_Sub.Get(strInput,strOutput,vectorInput,vectorOutput);
        }
        System.out.println(name1);
        System.out.println(name2);
        //timer.schedule(timerTask,1000,1000);
//        //m_prApi_Sub = this.GetApi("S_XX_SvrDemo");
//
//        String strTemp = "";
//        ArrayList<Byte> vectorInputTemp = new ArrayList<Byte>();
//        for(int i=0; i<1024;i++)
//        {
//            strTemp = strTemp +"1";
//        }
//        for(int j = 0;j<1024;j++)
//        {
//            m_strContent = m_strContent + strTemp;
//        }

//        byte byteTemp = 1;
//        for(int j=0;j<1024*1024;j++)
//        {
//            vectorInput.add(byteTemp);
//        }


        return 0;
        //********************消息订阅例子********************
        //获取心跳消息服务接口类
/*        PrApi prApi_Sub = this.GetApi("SvrJava");

        //判断服务接口类是否为空
        if(prApi_Sub != null) {
            //二进制输入内容
            ArrayList<Byte> vectorInput = new ArrayList<Byte>();

            CommonHead stCommonHead = new CommonHead(
                    "",//目的地址
                    "\\\\www.Dm1188.cn\\api\\v1.0\\SvrJava",//源地址
                    "MQ_HelloWorld",//主题
                    "V1.0",//信息版本号
                    0,//文件类型 0=实装、1=回放、2=模拟
                    "",//令牌
                    GetDate(),//获取1970年1月1日（北京时间）到现在的毫秒数
                    m_nMessageNumber,//唯一消息号，每发一包依次递增
                    new BufInfo(0, 1, 1),//有二进制数据的情况下填写,总包数,当前包号
                    ""
            );
            //唯一消息号，每发一包依次递增
            m_nMessageNumber++;
            //Json转换为字符串
            String strTemp = JSON.toJSONString(stCommonHead, SerializerFeature.PrettyFormat);
            //输入消息
            StringBuffer strInput = new StringBuffer(strTemp);

            //返回值
            String strRet = "";
            //调用订阅接口
            strRet = prApi_Sub.Post(strInput, vectorInput);

            String strRet1 = "";
            strRet1 = "321";
        }*/

        //********************点对点消息发送例子********************
        //获取运维分系统-心跳服务接口类
 /*       PrApi prApi = this.GetApi("S_XX_SvrDemo");

        //判断服务接口类是否为空
        if(prApi != null)
        {
            //二进制输入内容为0-10
            ArrayList<Byte> vectorInput = new ArrayList<Byte>();
            for(Byte i=0;i<10;i++)
            {
                Byte bTemp = i;
                vectorInput.add(bTemp);
            }
            //Json输入为{\"JsonContent\": \"Test\"}
            String strContent = "{\"JsonContent\": \"Test\"}";

            CommonHead stCommonHead = new CommonHead(
                    "\\\\www.Dm1188.cn\\api\\v1.0\\S_XX_SvrDemo",//目的地址
                    "\\\\www.Dm1188.cn\\api\\v1.0\\S_XX_JavaDemo",//源地址
                    "P2P_HelloWorld",//主题
                    "V1.0",//信息版本号
                    0,//文件类型 0=实装、1=回放、2=模拟
                    "",//令牌
                    new Date().getTime(),//获取1970年1月1日（北京时间）到现在的毫秒数
                    m_nMessageNumber,//唯一消息号，每发一包依次递增
                    new BufInfo(10, 1, 1),//有二进制数据的情况下填写,总包数,当前包号
                    strContent
            );
            //唯一消息号，每发一包依次递增
            m_nMessageNumber ++;
            //Json转换为字符串
            String strTemp = JSON.toJSONString(stCommonHead, SerializerFeature.PrettyFormat);
            //输入消息
            StringBuffer strInput = new StringBuffer(strTemp);

            //返回值
            String strRet = "";
            //字符串输出
            StringBuffer strOutput = new StringBuffer();
            //二进制输出
            ArrayList<Byte> vectorOutput = new ArrayList<Byte>();
            //调用发布接口
            strRet =  prApi.Get(strInput,strOutput,vectorInput,vectorOutput);
        }

        //********************消息订阅例子********************
        //获取心跳消息服务接口类
        PrApi prApi_Sub = this.GetApi("MQ_Debug");

        //判断服务接口类是否为空
        if(prApi_Sub != null) {
            //二进制输入内容
            ArrayList<Byte> vectorInput = new ArrayList<Byte>();

            CommonHead stCommonHead = new CommonHead(
                    "",//目的地址
                    "\\\\www.Dm1188.cn\\api\\v1.0\\SvrJava",//源地址
                    "MQ_HelloWorld",//主题
                    "V1.0",//信息版本号
                    0,//文件类型 0=实装、1=回放、2=模拟
                    "",//令牌
                    new Date().getTime(),//获取1970年1月1日（北京时间）到现在的毫秒数
                    m_nMessageNumber,//唯一消息号，每发一包依次递增
                    new BufInfo(0, 1, 1),//有二进制数据的情况下填写,总包数,当前包号
                    ""
            );
            //唯一消息号，每发一包依次递增
            m_nMessageNumber++;
            //Json转换为字符串
            String strTemp = JSON.toJSONString(stCommonHead, SerializerFeature.PrettyFormat);
            //输入消息
            StringBuffer strInput = new StringBuffer(strTemp);

            //返回值
            String strRet = "";
            //调用订阅接口
            strRet = prApi_Sub.Post(strInput, vectorInput);
        }

        //********************消息发布例子********************
        //获取心跳消息服务接口类
        PrApi prApi_Pub = this.GetApi("MQ_Debug");

        //判断服务接口类是否为空
        if(prApi_Pub != null)
        {
            //二进制输入内容为0-10
            ArrayList<Byte> vectorInput = new ArrayList<Byte>();
            for(Byte i=0;i<10;i++)
            {
                Byte bTemp = i;
                vectorInput.add(bTemp);
            }
            //Json输入为{\"JsonContent\": \"Test\"}
            String strContent = "{\"JsonContent\": \"Test\"}";

            CommonHead stCommonHead = new CommonHead(
                    "",//目的地址
                    "\\\\www.Dm1188.cn\\api\\v1.0\\S_XX_JavaDemo",//源地址
                    "MQ_HelloWorld",//主题
                    "V1.0",//信息版本号
                    0,//文件类型 0=实装、1=回放、2=模拟
                    "",//令牌
                    new Date().getTime(),//获取1970年1月1日（北京时间）到现在的毫秒数
                    m_nMessageNumber,//唯一消息号，每发一包依次递增
                    new BufInfo(10, 1, 1),//有二进制数据的情况下填写,总包数,当前包号
                    strContent
            );
            //唯一消息号，每发一包依次递增
            m_nMessageNumber ++;
            //Json转换为字符串
            String strTemp = JSON.toJSONString(stCommonHead, SerializerFeature.PrettyFormat);
            //输入消息
            StringBuffer strInput = new StringBuffer(strTemp);

            //返回值
            String strRet = "";
            //调用发布接口
            strRet =  prApi_Pub.Put(strInput,vectorInput);
        }*/

        //return 0;
    }

    //关闭函数，当服务退出前需要在本函数中进行析构
    //@return	返回值，返回0标识位成功，返回-1为失败
    public int OnClose()
    {
        String strJavaInterface = "JavaInterface_OnPostInit";
        System.out.println(strJavaInterface);
        return 0;
    }

    //数据读取、获取、选取响应函数；
    //@param	strInput为输入Json串
    //@param	strOutput为输出JSon串
    //@param	pInputBuf为输入二进制,用于传输数据用
    //@param	vectorOutput为输出二进制,用于传输数据用
    //@return	返回值，返回Ok标识发送成功，返回其他字符串为失败原因
    public String OnGet(StringBuffer strInput, StringBuffer strOutput, ArrayList<Byte> vectorInput, ArrayList<Byte> vectorOutput)
    {
        strOutput.append(m_strContent);
        byte byteTemp = 1;
        for(int j=0;j<1024*1024;j++)
        {
            vectorOutput.add(byteTemp);
        }
         //Json输入为{\"JsonContent\": \"Test\"}
//        String strContent = "{\"JsonContent\": \"Test\"}";
//
//        CommonHead stCommonHead = new CommonHead(
//                "\\\\www.Dm1188.cn\\api\\v1.0\\S_XX_SvrDemo",//目的地址
//                "\\\\www.Dm1188.cn\\api\\v1.0\\S_XX_JavaDemo",//源地址
//                "P2P_HelloWorld",//主题
//                "V1.0",//信息版本号
//                0,//文件类型 0=实装、1=回放、2=模拟
//                "",//令牌
//                new Date().getTime(),//获取1970年1月1日（北京时间）到现在的毫秒数
//                m_nMessageNumber,//唯一消息号，每发一包依次递增
//                new BufInfo(10, 1, 1),//有二进制数据的情况下填写,总包数,当前包号
//                strContent
//        );
//        //唯一消息号，每发一包依次递增
//        m_nMessageNumber ++;
//        //Json转换为字符串
//        String strTemp = JSON.toJSONString(stCommonHead, SerializerFeature.PrettyFormat);
//        strOutput.append(strTemp);
//
//        for(Byte i=0;i<10;i++)
//        {
//            Byte bTemp = i;
//            vectorOutput.add(bTemp);
//        }
//
        String strJavaInterface = "JavaInterface_OnGet";
        System.out.println(strJavaInterface);
        //System.out.println(strInput);
        return "1";
//        try {
//            int a = 10 / 0;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return e.getMessage();
//        }
//        return "1";
    }

    //数据创建、新建响应函数；
    //@param	strInput为输入Json串
    //@param	pInputBuf为输入二进制,用于传输数据用
    //@return	返回值，返回Ok标识发送成功，返回其他字符串为失败原因
    public String OnPost(StringBuffer strInput, ArrayList<Byte> vectorInput)
    {
        String strJavaInterface = "JavaInterface_OnPost";
        System.out.println(strJavaInterface);
        //System.out.println(strInput);
        return "2";
    }

    //数据更新、发送指令或数据响应函数，同时该函数在订阅发布时用于接收订阅数据；
    //@param	strInput为输入Json串
    //@param	pInputBuf为输入二进制,用于传输数据用
    //@return	返回值，返回Ok标识发送成功，返回其他字符串为失败原因
    public String OnPut(StringBuffer strInput, ArrayList<Byte> vectorInput)
    {
        String strJavaInterface = "JavaInterface_OnPut";
        System.out.println("strInput");
        System.out.println(strJavaInterface);
        return "3";
    }

    //数据删除
    //@param	strInput为输入Json串
    //@return	返回值，返回Ok标识发送成功，返回其他字符串为失败原因
    public String OnDelete(StringBuffer strInput)
    {
        String strJavaInterface = "JavaInterface_OnDelete";
        System.out.println(strJavaInterface);
        //System.out.println(strInput);
        return "4";
    }


}
